package main

//
//import "fmt"
//
//func main() {
//	fmt.Println(CpuIntensiveTaskBase(50))
//	fmt.Println(CpuIntensiveTaskUnrolled(50))
//	fmt.Println(CpuIntensiveTaskUnrolled4(50))
//	fmt.Println(CpuIntensiveTaskUnrolled8(50))
//	fmt.Println(CpuIntensiveTaskUnrolled16(50))
//	fmt.Println(CpuIntensiveTaskOptimizedMem(50))
//	fmt.Println(CpuIntensiveTaskPipeline(50))
//}
//
//// CpuIntensiveTaskBase 原始版本
//func CpuIntensiveTaskBase(compN int64) int64 {
//	// 防止编译器内联，便于性能分析
//	if compN <= 1 {
//		return compN
//	}
//	compN = compN*100000 + 1
//	var a, b int64 = 0, 1
//	for i := int64(2); i < compN; i++ {
//		a, b = b, a+b
//	}
//	return b
//}
//
//// CpuIntensiveTaskUnrolled4 4次循环展开（可能更适合CPU缓存）
//func CpuIntensiveTaskUnrolled4(compN int64) int64 {
//	if compN <= 1 {
//		return compN
//	}
//	compN = compN*100000 + 1
//
//	var a, b int64 = 0, 1
//	i := int64(2)
//
//	for ; i+4 <= compN; i += 4 {
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//	}
//
//	for ; i < compN; i++ {
//		a, b = b, a+b
//	}
//
//	return b
//}
//
//// CpuIntensiveTaskUnrolled8 8次循环展开
//func CpuIntensiveTaskUnrolled8(compN int64) int64 {
//	if compN <= 1 {
//		return compN
//	}
//	compN = compN*100000 + 1
//
//	var a, b int64 = 0, 1
//	i := int64(2)
//
//	// 8次展开，调整指令顺序
//	for ; i+8 <= compN; i += 8 {
//		b, a = a+b, b
//		b, a = a+b, b
//		b, a = a+b, b
//		b, a = a+b, b
//		b, a = a+b, b
//		b, a = a+b, b
//		b, a = a+b, b
//		b, a = a+b, b
//	}
//
//	for ; i < compN; i++ {
//		b, a = a+b, b
//	}
//
//	return b
//}
//
//// CpuIntensiveTaskUnrolled16 16次循环展开
//func CpuIntensiveTaskUnrolled16(compN int64) int64 {
//	if compN <= 1 {
//		return compN
//	}
//	compN = compN*100000 + 1
//
//	var a, b int64 = 0, 1
//	i := int64(2)
//
//	// 16次展开
//	for ; i+16 <= compN; i += 16 {
//		for j := 0; j < 16; j++ {
//			a, b = b, a+b
//		}
//	}
//
//	for ; i < compN; i++ {
//		a, b = b, a+b
//	}
//
//	return b
//}
//
//// CpuIntensiveTaskPipeline 使用流水线思想，减少数据依赖
//func CpuIntensiveTaskPipeline(compN int64) int64 {
//	if compN <= 1 {
//		return compN
//	}
//	compN = compN*100000 + 1
//
//	var a, b int64 = 0, 1
//
//	// 使用流水线思想，减少数据依赖
//	for i := int64(2); i < compN; i++ {
//		// 使用临时变量打破赋值链
//		temp := a
//		a = b
//		b = temp + b
//	}
//
//	return b
//}
//
//// CpuIntensiveTaskUnrolled 循环展开版本 - 减少循环次数和条件判断
//func CpuIntensiveTaskUnrolled(compN int64) int64 {
//	if compN <= 1 {
//		return compN
//	}
//	compN = compN*100000 + 1
//
//	var a, b int64 = 0, 1
//	i := int64(2)
//
//	// 每次循环处理8次迭代，减少条件判断次数
//	for ; i+8 <= compN; i += 8 {
//		// 手动展开8次迭代
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//		a, b = b, a+b
//	}
//
//	// 处理剩余迭代
//	for ; i < compN; i++ {
//		a, b = b, a+b
//	}
//
//	return b
//}
//
//// CpuIntensiveTaskOptimizedMem 减少内存访问的优化版本
//func CpuIntensiveTaskOptimizedMem(compN int64) int64 {
//	if compN <= 1 {
//		return compN
//	}
//	compN = compN*100000 + 1
//
//	// 使用局部变量减少内存访问
//	var a, b int64 = 0, 1
//	var i int64
//
//	// 将循环条件提到外部
//	n := compN
//	for i = 2; i < n; i++ {
//		// 使用临时变量减少赋值操作
//		next := a + b
//		a = b
//		b = next
//	}
//	return b
//}
